package com.topten.beans;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;



import javax.faces.context.FacesContext;


import com.topten.basicas.comum.Situacao;
import com.topten.basicas.varejo.Categoria;
import com.topten.basicas.varejo.Marca;
import com.topten.basicas.varejo.Produto;
import com.topten.basicas.varejo.Unidade;
import com.topten.negocio.Fachada;
import com.topten.negocio.IFachada;

@ManagedBean
public class ProdutoBean {
	private Produto produto = new Produto();
	private IFachada fachada = Fachada.getInstancia();
	private Situacao[] situacao;
	private Integer IdCategoriaSelected;
	private Integer IdMarcaSelected;
	private Integer IdUnidadeSelected;
	private Integer produtoSelecionado;
	
	public ProdutoBean(){
		
	}
	
	public String salvarProduto(){
		try {
			produto.setCategoria(fachada.buscarPorId(this.getIdCategoriaSelected()));
			produto.setMarca(fachada.buscarMarcaPorId(this.getIdMarcaSelected()));
			produto.setUnidade(fachada.buscarUnidadePorId(this.getIdUnidadeSelected()));
			
			fachada.inserirProduto(produto);
			
			if (produto.getCodigo() == null || produto.getCodigo() == 0){
				produto.setCodigo(null);
				fachada.inserirProduto(produto);
				
			} else {
				fachada.alterarProduto(produto);
			}
					
			return "produto-listar.xhtml";
		}catch(Exception e){
			e.printStackTrace();
			return "erro";
		}
	}
	
	/**
	 * @return the situacao
	 */
	public Situacao[] getSituacao() {
		return Situacao.values();
	}

	public String excluirProduto(Produto param){
		
		Fachada.getInstancia().removerProduto(param);
		return "produto-listar.xhtml";
	}
	
	
	public String editarProduto(Produto param) {
		
		try {
			this.produto = param;
			this.IdCategoriaSelected = param.getCategoria().getCodigo();
			this.IdMarcaSelected = param.getMarca().getCodigo();
			this.IdUnidadeSelected = param.getUnidade().getCodigo();
		
					
			return "CadastroProduto.xhtml";
			
		} catch (Exception e) {
			
			e.printStackTrace();
			return "erro";
		}
	
	}
	
	
	public List<Produto> getColecaoProduto(){
		return fachada.listarProdutosGeral();
	}
	
	
	
	public String pesquisarProdPorId(Integer id){
		Fachada.getInstancia().buscarProdutoPorId(id);
		return "produto-listar.xhtml";
	}
	
	
	public List<Produto> listarPorCategoria(Categoria categ){
		
		return Fachada.getInstancia().listarPorCateg(categ);
	
		
	}
	
	public List<Produto>listarPorMarca(Marca marca){
		
		return Fachada.getInstancia().listarPorMarc(marca);
	}
	
	public List<Produto>listarPorUnidade(Unidade unidade){
		return Fachada.getInstancia().listarPorUnidade(unidade);
	}


	/**
	 * @return the produto
	 */
	public Produto getProduto() {
		return produto;
	}

	/**
	 * @param produto the produto to set
	 */
	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<Categoria>getColecaoCategoria(){
		return fachada.listarTodos();
	}
	
	public List<Marca> getColecaoMarca(){
		return fachada.listarTodasMarcas();
	
	}
	
	public List<Unidade>getColecaoUnidade(){
		return fachada.listarTodasUnidades();
	}
	
	/**
	 * @return the produtoSelecionado
	 */
	public Integer getProdutoSelecionado() {
		return produtoSelecionado;
	}

	/**
	 * @param produtoSelecionado the produtoSelecionado to set
	 */
	public void setProdutoSelecionado(Integer produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
	}

	/**
	 * @return the idCategoriaSelected
	 */
	public Integer getIdCategoriaSelected() {
		return IdCategoriaSelected;
	}

	/**
	 * @param idCategoriaSelected the idCategoriaSelected to set
	 */
	public void setIdCategoriaSelected(Integer idCategoriaSelected) {
		IdCategoriaSelected = idCategoriaSelected;
	}

	/**
	 * @return the idMarcaSelected
	 */
	public Integer getIdMarcaSelected() {
		return IdMarcaSelected;
	}

	/**
	 * @param idMarcaSelected the idMarcaSelected to set
	 */
	public void setIdMarcaSelected(Integer idMarcaSelected) {
		IdMarcaSelected = idMarcaSelected;
	}

	/**
	 * @return the idUnidadeSelected
	 */
	public Integer getIdUnidadeSelected() {
		return IdUnidadeSelected;
	}

	/**
	 * @param idUnidadeSelected the idUnidadeSelected to set
	 */
	public void setIdUnidadeSelected(Integer idUnidadeSelected) {
		IdUnidadeSelected = idUnidadeSelected;
	}
	

}
